package wenjun.du.androidart.view

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_view_touch.*
import wenjun.du.androidart.R

/**
 * 控件touch事件传递知识相关：
 *
 * 事件传递的伪代码如下；
 *
 *  fun dispatchTouchEvent(touchEvent:MotionEvent){
 *    val isHandle:Boolean
 *
 *    if((touchEveonInterceptTouchEventnt)){
 *       isHandle = onTouchEvent(touchEvent)
 *    } else {
 *       isHandle = child.dispatchTouchEvent(touchEvent)
 *    }
 *  }
 *
 *  其中如果控件设值了touchListener 该监听会优先于onTouchEvent执行 并且在事件up中会触发click的监听回调
 *
 *  控件的disable状态下仍可以捕获onTouchEvent事件 只有在控件click和longClick都不可以的情况下 onTouchEvent事件才不能被触发
 *
 *
 *  解决事件冲突的方式；
 *  1.外部拦截法， 从传递touch事件的夫节点入手，重写父控件的拦截事件方法
 *  2.内部拦截法，从传递touch事件的子节点入手，通过子控件调用父控件的requestDisallowInterceptTouchEvent方法是否拦截事件
 *
 * 在事件传递流中 如果中途发生了父控件拦截事件 则子控件收到ACTION_CANCEL事件后 不再收到touch事件
 *
 * */
class OutViewTouchActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_view_touch)

        touch_button.setOnClickListener {
            Toast.makeText(this, " 测试view点击事件 ", Toast.LENGTH_SHORT).show()
        }
    }
}